var old = $('#grid').html();
$("#grid").append(old + html); заменить на $("#grid").append(html);
иначе вы постоянно перезаписываете все содержимое $("#grid"), а нужно лишь добавлять к имеющемуся возвращенное сервером.
Сообщение о загрузке оформите блоком с абсолютным позиционированием, показывая его перед началом запроса и скрывая после него.
Статического кода нет, есть статичное содержимое, которое можно хранить в файлах, но зачем же плодить запросы по разным url. Пусть есть статичные файлы, передавайте серверному скрипту content.php параметр определяющий файл. Если именовать файлы по порядку, от 1 до N, то запрос:
$.ajax({
type: "GET",
url: "/content.php",
data: {page=номер файла},
....
где "номер файла" - номер определяющий запрашиваемый файл, который можно хранить в переменной как счетчик увеличивающийся при каждом запросе.
Сервер получая параметр page, проверяет по пути наличие файла и если есть таковой, то подключает его:
if(file_exists('path/' . $_GET['page'] . '.html')) include 'path/' . $_GET['page'] . '.html';
Если файла не существует, к примеру достигнут конец, то сервер ничего не вернет, и на клиенте можно так:
if(!!html) $("#grid").append(html);